// 无重复长的字符串
var lengthOfLongestSubstring = function(s) {
    const n = s.length
       // 使用map来记录单个ch最后出现的位置
       const map = new Map()
       // [l, r]为一个窗口
       let l = 0, ans = 0
       for(let r = 0; r<n; r++){
           if(map.has(s[r])){
               // map.get(s[r]) 返回字符 s[r] 上一次出现的位置索引。
               // max比较是为了防止l被跳到前面的索引去
               l = Math.max(map.get(s[r])+1,l)
           }
           map.set(s[r], r)
           ans = Math.max(ans, r-l+1)
       }
       return ans
   
   
   };